#!/bin/bash

# 柯基工具箱后端启动脚本
# 作者: Claude
# 日期: 2023年11月

# 定义应用路径
APP_PATH="/home/lighthouse/site/office-toolbox/backend"
APP_NAME="corgi-toolbox"
APP_PORT=3001  # 使用3001端口避免与其他应用冲突

# 输出彩色信息
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${YELLOW}===============================================${NC}"
echo -e "${GREEN}柯基工具箱后端服务启动脚本${NC}"
echo -e "${YELLOW}===============================================${NC}"

# 检查目录是否存在
if [ ! -d "$APP_PATH" ]; then
  echo -e "${RED}错误: 应用目录 $APP_PATH 不存在${NC}"
  exit 1
fi

# 切换到应用目录
cd $APP_PATH

# 检查Node.js和npm是否安装
if ! command -v node &> /dev/null; then
  echo -e "${RED}错误: Node.js未安装${NC}"
  exit 1
fi

if ! command -v npm &> /dev/null; then
  echo -e "${RED}错误: npm未安装${NC}"
  exit 1
fi

# 检查PM2是否安装
if ! command -v pm2 &> /dev/null; then
  echo -e "${YELLOW}PM2未安装，正在安装...${NC}"
  npm install -g pm2
  if [ $? -ne 0 ]; then
    echo -e "${RED}PM2安装失败${NC}"
    exit 1
  fi
fi

# 安装依赖
echo -e "${YELLOW}正在安装依赖...${NC}"
npm install
if [ $? -ne 0 ]; then
  echo -e "${RED}依赖安装失败${NC}"
  exit 1
fi

# 确保环境变量文件存在
if [ ! -f ".env" ]; then
  echo -e "${YELLOW}.env文件不存在，正在创建默认配置...${NC}"
  cat > .env << EOL
PORT=$APP_PORT
NODE_ENV=production
JWT_SECRET=$(openssl rand -hex 32)
JWT_EXPIRES_IN=1h
REFRESH_TOKEN_SECRET=$(openssl rand -hex 32)
REFRESH_TOKEN_EXPIRES_IN=7d
DB_PATH=./src/db/database.sqlite
EOL
else
  # 更新PORT配置
  grep -q "^PORT=" .env && sed -i "s/^PORT=.*/PORT=$APP_PORT/" .env || echo "PORT=$APP_PORT" >> .env
fi

# 创建必要的目录
echo -e "${YELLOW}正在创建必要的目录...${NC}"
mkdir -p public/uploads
chmod 755 public/uploads

# 启动应用
echo -e "${YELLOW}正在启动应用...${NC}"
pm2 describe $APP_NAME > /dev/null
if [ $? -eq 0 ]; then
  echo -e "${YELLOW}应用已存在，正在重启...${NC}"
  pm2 restart $APP_NAME
else
  echo -e "${YELLOW}正在启动新应用实例...${NC}"
  pm2 start src/index.js --name "$APP_NAME" --env production
fi

# 设置开机自启
echo -e "${YELLOW}设置PM2开机自启...${NC}"
pm2 save
pm2 startup

echo -e "${YELLOW}===============================================${NC}"
echo -e "${GREEN}柯基工具箱后端服务已启动${NC}"
echo -e "${GREEN}应用名称: $APP_NAME${NC}"
echo -e "${GREEN}应用端口: $APP_PORT${NC}"
echo -e "${GREEN}日志查看: pm2 logs $APP_NAME${NC}"
echo -e "${YELLOW}===============================================${NC}"

# 显示应用状态
pm2 status $APP_NAME

exit 0 